package com.view;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.primefaces.model.UploadedFile;

import com.validators.ObjectSelected;

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
public class ProductoView extends BaseView implements Serializable {

	@NotNull(message = "Valor requerido")
	@Size(min = 1, max = 200, message = "El detalle del Producto debe tener entre 1 y 200 caracteres.")
	private String detalle;

	@Size(min = 1, max = 25, message = "El codigo de producto debe tener entre 1 y 25 caracteres.")
	private String codigoProducto;

	@ObjectSelected(message = "Debe seleccionar una unidad de medida.")
	private UnidadDeMedidaView unidadDeMedida;

	private Double peso;

	@ObjectSelected(message = "Debe seleccionar una familia.")
	private FamiliaView familia;

	private Double stockMinimo;

	@ObjectSelected(message = "Debe seleccionar una marca.")
	private MarcaView marca;

	@ObjectSelected(message = "Debe seleccionar un envase.")
	private EnvaseView envase;

	@Size(max = 500, message = "La descripcion del Producto debe tener como maximo 500 caracteres.")
	private String descripcion;

	private UploadedFile imagen;

	private byte[] imagenBytes;

	private String rutaArchivo;

	private String nombreArchivo;

	public ProductoView(Long id, String codigoProducto, String detalle,
			UnidadDeMedidaView unidadDeMedida, FamiliaView familia,
			Double stockMinimo, MarcaView marca, EnvaseView envase,
			Double peso, String descripcion, byte[] imagenBytes,
			String rutaArchivo, String nombreArchivo) {
		this.id = id;
		this.codigoProducto = codigoProducto;
		this.detalle = detalle;
		if (unidadDeMedida == null) {
			this.unidadDeMedida = new UnidadDeMedidaView();
		} else {
			this.unidadDeMedida = unidadDeMedida;
		}
		if (familia == null) {
			this.familia = new FamiliaView();
		} else {
			this.familia = familia;
		}

		this.stockMinimo = stockMinimo;
		this.peso = peso;
		this.descripcion = descripcion;

		if (marca == null) {
			this.marca = new MarcaView();
		} else {
			this.marca = marca;
		}
		if (envase == null) {
			this.envase = new EnvaseView();
		} else {
			this.envase = envase;
		}

		this.imagenBytes = imagenBytes;
		this.rutaArchivo = rutaArchivo;
		this.nombreArchivo = nombreArchivo;
	}

	public ProductoView() {
		this(null, null, null, new UnidadDeMedidaView(), new FamiliaView(),
				null, new MarcaView(), new EnvaseView(), null, null, null,
				null, null);
	}

	public String getDetalle() {
		return detalle;
	}

	public void setDetalle(String detalle) {
		this.detalle = detalle;
	}

	public String getCodigoProducto() {
		return codigoProducto;
	}

	public void setCodigoProducto(String codigoProducto) {
		this.codigoProducto = codigoProducto;
	}

	public UnidadDeMedidaView getUnidadDeMedida() {
		return unidadDeMedida;
	}

	public void setUnidadDeMedida(UnidadDeMedidaView unidadDeMedida) {
		this.unidadDeMedida = unidadDeMedida;
	}

	public FamiliaView getFamilia() {
		return familia;
	}

	public void setFamilia(FamiliaView familia) {
		this.familia = familia;
	}

	public Double getStockMinimo() {
		return stockMinimo;
	}

	public void setStockMinimo(Double stockMinimo) {
		this.stockMinimo = stockMinimo;
	}

	public MarcaView getMarca() {
		return marca;
	}

	public void setMarca(MarcaView marca) {
		this.marca = marca;
	}

	public EnvaseView getEnvase() {
		return envase;
	}

	public void setEnvase(EnvaseView envase) {
		this.envase = envase;
	}

	public Double getPeso() {
		return peso;
	}

	public void setPeso(Double peso) {
		this.peso = peso;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public UploadedFile getImagen() {
		return imagen;
	}

	public void setImagen(UploadedFile imagen) {
		this.imagen = imagen;
	}

	public byte[] getImagenBytes() {
		return imagenBytes;
	}

	public void setImagenBytes(byte[] imagenBytes) {
		this.imagenBytes = imagenBytes;
	}

	public String getRutaArchivo() {
		return rutaArchivo;
	}

	public void setRutaArchivo(String rutaArchivo) {
		this.rutaArchivo = rutaArchivo;
	}

	public String getNombreArchivo() {
		return nombreArchivo;
	}

	public void setNombreArchivo(String nombreArchivo) {
		this.nombreArchivo = nombreArchivo;
	}

	@Override
	public boolean equals(Object obj) {

		boolean ret = true;

		ProductoView producto = (ProductoView) obj;

		if (this.getId() != null && producto.getId() != null) {
			ret = this.id.intValue() == producto.getId().intValue();
		} else if (this.getId() == null && producto.getId() == null) {
			ret = true;
		} else {
			ret = false;
		}

		return ret;
	}

}
